#ifndef METABLOQUEBPLUS_H
#define METABLOQUEBPLUS_H

#include "SerialInator.h"

class MetaBloqueBPlus {
	private:
		unsigned long int _cantBloques;
		unsigned long int _refRaiz;
		unsigned long int _refHoja;
		unsigned long int _refVacio;

		SerialInator _serializador;
	public:
		MetaBloqueBPlus();
		~MetaBloqueBPlus();

		// Los datos que se guardan el la cabecera
		unsigned long int getCantBloques();
		unsigned long int getRefBloqueRaiz();
		unsigned long int getRefBloqueHoja();
		unsigned long int getRefBloqueVacio();

		void setCantBloques(unsigned long int cantidad);
		void setRefBloqueRaiz(unsigned long int referencia);
		void setRefBloqueHoja(unsigned long int referencia);
		void setRefBloqueVacio(unsigned long int referencia);

		// Devuelve el tamaño que ocupan los datos de la cabecera
		unsigned long int getSize();

		/* La cabecera del archivo contiene metadata de mantenimiento sobre 
		 * el mismo, estos datos son:
		 * 	{cantidad de bloques}{referencia a nodo raiz}{referencia a nodo hoja}
		 *	{referencia a nodo eliminado-vacio}
		 * */
		void unpack(char* headerData);

		/* Transforma los datos en bytes para que puedan ser guardados
		 * y los guarda en memoria, el buffer debe tener tamaño suficiente
		 * */
		void pack(char* headerData);
};


#endif
